package cn.fornever.tools.db.assist.entity;

/**
 * DataBase Meta Data中获取到的主键信息.
 * <p>对应DatabaseMetaData.getPrimaryKeys()</p>
 *
 * @author ZhangAY
 */
public class PrimaryKeyInfo {
    /**
     * 1:Table Catlog.可能为 {@code null}
     */
    private String tableCat;
    /**
     * 2:Table Schem.可能为 {@code null}
     */
    private String tableSchem;
    /**
     * 3:表名
     */
    private String tableName;//3
    /**
     * 4:列名
     */
    private String columnName;

    /**
     * 5:主键中的序列号(值 1 表示主键中的第一列,值 2 表示主键中的第二列)
     */
    private Short keySeq;

    /**
     * 6:主键名称
     */
    private String pkName;

    /**
     * 1:Table Catlog.可能为 {@code null}
     *
     * @return Table Catlog
     */
    public String getTableCat() {
        return tableCat;
    }

    /**
     * 1:Table Catlog.可能为 {@code null}
     *
     * @param tableCat Table Catlog
     */
    public void setTableCat(String tableCat) {
        this.tableCat = tableCat;
    }

    /**
     * 2:Table Schem.可能为 {@code null}
     *
     * @return Table Schem.
     */
    public String getTableSchem() {
        return tableSchem;
    }

    /**
     * 2:Table Schem.可能为 {@code null}
     *
     * @param tableSchem Table Schem.
     */
    public void setTableSchem(String tableSchem) {
        this.tableSchem = tableSchem;
    }

    /**
     * 3:Table Name.
     *
     * @return Table Name.
     */
    public String getTableName() {
        return tableName;
    }

    /**
     * 3:Table Name.
     *
     * @param tableName Table Name.
     */
    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    /**
     * 4:列名.
     *
     * @return 列名
     */
    public String getColumnName() {
        return columnName;
    }

    /**
     * 4:列名
     *
     * @param columnName 列名
     */
    public void setColumnName(String columnName) {
        this.columnName = columnName;
    }

    /**
     * 5:主键中的序列号(值 1 表示主键中的第一列,值 2 表示主键中的第二列)
     *
     * @return 主键中的序列号
     */
    public Short getKeySeq() {
        return keySeq;
    }

    /**
     * 5:主键中的序列号(值 1 表示主键中的第一列,值 2 表示主键中的第二列)
     *
     * @param keySeq 主键中的序列号
     */
    public void setKeySeq(Short keySeq) {
        this.keySeq = keySeq;
    }

    /**
     * 6:主键名称
     *
     * @return 主键名称
     */
    public String getPkName() {
        return pkName;
    }

    /**
     * 6:主键名称
     *
     * @param pkName 主键名称
     */
    public void setPkName(String pkName) {
        this.pkName = pkName;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        PrimaryKeyInfo that = (PrimaryKeyInfo) o;

        if (tableCat != null ? !tableCat.equals(that.tableCat) : that.tableCat != null) return false;
        if (tableSchem != null ? !tableSchem.equals(that.tableSchem) : that.tableSchem != null) return false;
        if (tableName != null ? !tableName.equals(that.tableName) : that.tableName != null) return false;
        if (columnName != null ? !columnName.equals(that.columnName) : that.columnName != null) return false;
        if (keySeq != null ? !keySeq.equals(that.keySeq) : that.keySeq != null) return false;
        return pkName != null ? pkName.equals(that.pkName) : that.pkName == null;

    }

    @Override
    public int hashCode() {
        int result = tableCat != null ? tableCat.hashCode() : 0;
        result = 31 * result + (tableSchem != null ? tableSchem.hashCode() : 0);
        result = 31 * result + (tableName != null ? tableName.hashCode() : 0);
        result = 31 * result + (columnName != null ? columnName.hashCode() : 0);
        result = 31 * result + (keySeq != null ? keySeq.hashCode() : 0);
        result = 31 * result + (pkName != null ? pkName.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "PrimaryKeyInfo{" +
                "tableCat='" + tableCat + '\'' +
                ", tableSchem='" + tableSchem + '\'' +
                ", tableName='" + tableName + '\'' +
                ", columnName='" + columnName + '\'' +
                ", keySeq=" + keySeq +
                ", pkName='" + pkName + '\'' +
                '}';
    }
}
